"""
Django应用配置
演示如何使用AdminConfig来自定义Admin配置

实现方案：
1. 使用AdminConfig替换默认的django.contrib.admin
2. 保留多站点管理的功能（用于演示不同的管理场景）
3. 统一管理主Admin站点的配置
"""
from django.contrib.admin.apps import AdminConfig


class CustomAdminConfig(AdminConfig):
    """
    自定义Admin配置类
    用于替换默认的django.contrib.admin配置

    这种方式的优势：
    1. 符合Django应用配置模式
    2. 统一管理admin配置
    3. 可以在ready()中进行初始化
    4. 更好的可测试性和可维护性
    """
    name = 'django.contrib.admin'
    verbose_name = 'Django Admin学习项目管理后台'

    # 指定自定义的默认AdminSite
    default_site = 'admin_learn_project.admin_sites.enhanced_admin_site'

    def ready(self):
        """
        应用就绪时的钩子函数
        在这里进行admin相关的初始化操作
        """
        super().ready()

        # 打印加载信息
        print("🚀 Django Admin学习项目配置已加载")

        # 自定义全局admin配置
        self._configure_default_admin()

        # 注册信号处理器（如果需要）
        self._register_signals()

    def _configure_default_admin(self):
        """
        配置默认的admin站点
        """
        from django.contrib import admin

        # 设置默认admin站点的基本信息
        admin.site.site_header = 'Django Admin学习项目'
        admin.site.site_title = 'Admin学习'
        admin.site.index_title = '欢迎使用Django Admin学习项目'
        admin.site.site_url = '/'

        # 可以设置自定义的登录模板
        # admin.site.login_template = 'admin/enhanced_login.html'

        print("✅ 默认Admin站点配置完成")

    def _register_signals(self):
        """
        注册Django信号处理器
        可以在这里添加admin相关的信号处理
        """
        # 例如：监听用户登录信号
        # from django.contrib.auth.signals import user_logged_in
        # user_logged_in.connect(self._on_user_login)
        pass

    def _on_user_login(self, sender, user, request, **kwargs):
        """
        用户登录时的处理
        """
        print(f"用户 {user.username} 登录了admin后台")


class ProjectAdminConfig(AdminConfig):
    """
    项目级别的Admin配置
    如果您想要完全替换默认admin，可以使用这个配置
    """
    name = 'django.contrib.admin'
    verbose_name = '企业级管理后台'

    # 使用完全自定义的AdminSite
    default_site = 'admin_learn_project.admin_sites.custom_admin_site'

    def ready(self):
        super().ready()

        # 企业级配置
        self._setup_enterprise_admin()

    def _setup_enterprise_admin(self):
        """
        企业级admin配置
        """
        from django.contrib import admin

        admin.site.site_header = '企业级管理系统'
        admin.site.site_title = '企业管理'
        admin.site.index_title = '企业管理控制台'

        # 可以添加更多企业级配置
        # 如：自定义权限检查、审计日志等
        print("🏢 企业级Admin配置完成")
